Skip to main content

网络:HTTP_2 提升网络速度

视频

HTTP/1.1 对带宽的利用率低

TCP 的慢启动

一旦一个 TCP 连接建立之后,就进入了发送数据状态,刚开始 TCP 协议会采用一个非常慢的速度去发送数据,然后慢慢加快发送数据的速度,直到发送数据的速度达到一个理想状态,我们把这个过程称为慢启动。

  • 为了减少网络拥塞
  • 会带来性能问题

同时开启多条 TCP 连接会竞争固定的带宽

TCP 连接之间不能协商让关键资源优先下载

队头阻塞的问题

HTTP/2 特性

多路复用

一个域名只使用一个 TCP 长连接

  • 整个页面资源的下载过程只需要一次慢启动
  • 避免了多个 TCP 连接竞争带宽所带来的问题

消除队头阻塞问题

  • 实现资源的并行请求

实现原理

  1. 浏览器准备好请求数据,包括了请求行、请求头等信息,如果是 POST 方法,那么还要有请求体
  2. 数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器
  3. 服务器接收到所有帧之后,会将所有相同 ID 的帧合并为一条完整的请求信息
  4. 服务器处理该条请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层
  5. 二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器
  6. 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求

优先处理关键资源的请求

可以设置请求的优先级

在发送请求时,标上该请求的优先级,这样服务器接收到请求之后,会优先处理优先级高的请求

服务器推送

可以直接将数据提前推送到浏览器:

用户请求一个 HTML 页面之后,服务器知道该 HTML 页面会引用几个重要的 JavaScript 文件和 CSS 文件,那么在接收到 HTML 请求之后,附带将要使用的 CSS 文件和 JavaScript 文件一并发送给浏览器,这样当浏览器解析完 HTML 文件之后,就能直接拿到需要的 CSS 文件和 JavaScript 文件,这对首次打开页面的速度起到了至关重要的作用。

头部压缩

对请求头和响应头进行了压缩